GeneralUpdate.Avalonia.Android 实战手册
这篇手册面向需要在 Avalonia 应用中集成 Android APK 自动更新的开发者。目标是用最少的代码跑通"查询服务端 → 下载 APK → 校验 SHA256 → 拉起安装器 → 下次启动确认安装"的完整闭环。
前置知识
这篇手册假设你已经有一个 Avalonia 项目并配置好了 Android 目标框架。如果你还没有 Avalonia Android 项目,请先参考 Avalonia 官方文档 创建。
更新流程
① 查询版本(组件内部完成) ② 下载并校验 APK ③ 安装与确认
┌──────────────┐ ┌──────────┐ ┌──────────────────┐
│ Client │──POST──────→│ Server │ │ Android │
│ (Avalonia) │←──JSON──────│(更新服务) │ │ Package │
└──────┬───────┘ └────┬─────┘ │ Installer │
│ │ └────────┬─────────┘
│ ValidateAsync(currentVersion) 由组件发起请求 │
│ 拿到 PackageInfo(version/url/hash/size…) │
│ │ │
│ GET /app-v2.0.0.apk(支持 Range,可断点续传) │
│ ────────────────────────→│ │
│ APK 数据流 ←─────────────│ │
│ │ │
│ 文件大小 + SHA256 校验通过后写入安装记录 │
│ 拉起 Package Installer ─────────────────────────────→ │
│ │ │
│ ★ 下次启动 CheckInstallationAsync 核对本机版本 ←───────│
▼ ▼ ▼
| 角色 | 定义 | 负责什么 |
|---|---|---|
| Client(Avalonia) | 你的 Avalonia Android 应用 | 查询版本 → 下载 APK → 校验 → 拉起安装器 → 核对安装结果 |
| Server | 更新服务 | 返回版本信息、提供支持 Range 的 APK 下载 |
| Android Package Installer | Android 系统组件 | 安装 APK(验证签名、替换应用) |
Phase 1:环境准备
安装清单
| 项 | 要求 | 验证命令 |
|---|---|---|
| .NET SDK | 10.0+ | dotnet --version |
| Android workload | 已安装 | dotnet workload list(应包含 android) |
| Android SDK | API 26+ | Android Studio SDK Manager |
| Avalonia | 12+ | 项目引用的 Avalonia 包版本 |
| 目标框架 | net10.0-android | .csproj 的 TargetFramework |
NuGet 包
dotnet add package GeneralUpdate.Avalonia.Android
Phase 2:Android 接入配置
要真正走完一次更新,宿主必须配置好下面三项,缺一项就会停在半路。
2.1 声明安装权限(Android 8.0+)
在 AndroidManifest.xml 中:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
用户可能仍未授予,此时 LaunchInstallerAsync 返回 FailureReason = InstallPermissionDenied。用下面的代码引导用户开启"允许安装未知应用",授权后重试即可:
var context = Android.App.Application.Context;
context.StartActivity(new Android.Content.Intent(
Android.Provider.Settings.ActionManageUnknownAppSources,
Android.Net.Uri.Parse("package:" + context.PackageName))
.AddFlags(Android.Content.ActivityFlags.NewTask));